import os
import random

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time



"""
童漫系列
author: liandyao
date: @date

"""
# 抖音需要标题
titles = [
    "╮(￣▽ ￣)╭猫和老鼠.经典对决：猫与鼠的无尽追逐",
    "≧◇≦ 猫和老鼠.聪明的杰瑞与笨拙的汤姆",
    "╮(￣▽ ￣)╭猫和老鼠.创意满满的搞笑时刻",
    "≧◇≦ 猫和老鼠.每集都是一场精彩的猫鼠游戏",
    "╮(￣▽ ￣)╭猫和老鼠.精彩动画：欢乐无处不在",
    "*\(^_^)/*猫和老鼠.非凡的默剧艺术，笑点不断",
    "\(^o^)/友谊与对抗：猫鼠之间的奇妙关系",
    "*\(^_^)/*猫和老鼠.跨越年代，陪伴成长的经典",
    "\(^o^)/猫和老鼠.无声的追逐，声声入戏",
    "*\(^_^)/*永恒的欢乐，让人忍俊不禁",
    "╮(￣▽ ￣)╭猫鼠大战：每一集都是精彩绝伦的喜剧",
    "*\(^_^)/*猫和老鼠.汤姆的执着与杰瑞的机智",
    "\(^o^)/猫和老鼠.搞笑无限，引发笑声连连",
    "*\(^_^)/*猫和老鼠.无言的争斗，默默传递情感",
    "╮(￣▽ ￣)╭猫和老鼠.从未停止的追逐，永恒的友谊",
    "*\(^_^)/*经典场景，令人怀念的搞笑瞬间",
    "╮(￣▽ ￣)╭猫和老鼠.创意与幽默的完美结合",
    "*\(^_^)/*每一次失败都成为搞笑的高潮",
    "\(^o^)/跨越世代，带来欢乐童年回忆",
    "*\(^_^)/*无敌的猫和聪明的小老鼠，谁能胜出？"
]

titles = [
    "╮(￣▽ ￣)╭东北话版",

]
# 描述
descris = [
    "生活就像汤姆和杰瑞，永远充满追逐与欢笑。",
    "有时候，你必须像杰瑞一样聪明，才能在困境中逃脱。",
    "只要有梦，就应该执着追逐，无论前方有多少汤姆！",
    "猫总是想抓住老鼠，但杰瑞教会我们，智慧永远胜于力量。",
    "坚持不懈，哪怕每次都被汤姆追到，也要勇敢反击！",
    "在生活的追逐中，不怕跌倒，就像杰瑞一样，总会有新一轮的冒险。",
    "幽默是生活的调味剂，汤姆的笨拙和杰瑞的机智就是最好的例子。",
    "快乐是逃避，痛苦是追逐，生活就是这场猫鼠游戏。",
    "有些事情就像汤姆总是追不上杰瑞，不必过于执着，保持幽默才是王道。",
    "在追逐梦想的路上，精明而幽默的人总能找到出路！",
    "有时候，聪明的老鼠才是真正的赢家，这就是人生哲学！",
    "生活就像一场猫鼠游戏，永远是追逐与被追逐的状态！",
    "当你觉得自己被追赶时，记得要像杰瑞一样机智反击！",
    "追梦的路上，难免会有像汤姆一样的阻碍，要用幽默面对！",
    "失败就像汤姆的十几次抓捕，机智才是最终的胜利者。",
    "生活中的每次滑稽都是一次成长，别忘了像杰瑞一样乐观！",
    "有些事情就像汤姆对杰瑞的追逐，愚蠢得让人哭笑不得！",
    "坚持追求自己的目标，即使道路坎坷，也要像杰瑞一样勇敢！",
    "每一次的搞笑都是一段精彩的冒险，永远不要低估幽默的力量！",
    "不怕追逐，从失败中学习，像杰瑞一样涅槃重生！",
    "蹲坑的时候来一集动画，才能找到自己的路！",
    "蹲坑的时候来一集动画，才能找到自己的归属！",
    "蹲坑的时候来一集动画，才能有归属感！",
    "蹲坑的时候来一集动画，才能有多巴胺！",
    "蹲坑的时候来一集动画，才能有荷尔蒙爆发！",
     "蹲坑的时候来一集动画，才能有多巴胺！",
    "蹲坑的时候来一集动画，才能有荷尔蒙爆发！",
    "蹲坑的时候来一集动画，才能找到自己的路！",
    "蹲坑的时候来一集动画，才能找到自己的路！",

]

tags = [
    "#我在抖音看动画",
"#我在抖音看动画",
"#我在抖音看动画",
"#我在抖音看动画",
"#我在抖音看动画",
"#我在抖音看动画",
    "#童年动漫",
    "#经典动画",
    "#搞笑动画",
    "#动画片推荐",
    "#治愈系动画",
    "#热血动漫",
    "#萌宠动画",
    "#动画短片",
    "#动画电影",
    "#怀旧动画",
    "#动画音乐",
    "#动漫角色",
    "#动画故事",
    "#亲子动画",
    "#动漫剪辑",
    "#二次元",
    "#动画人生",
    "#校园动漫",
    "#冒险动画",
    "#奇幻动漫",
    "#在动画中学到的道理",
    "#动画中的友谊",
    "#动漫治愈心灵",
    "#动画场景分享",
    "#经典角色回顾",
    "#动画中的爱情",
    "#启发人生的动漫",
    "#动画经典台词",
    "#动漫与现实",
    "#搞笑搞怪动漫",
    "#动画片怀旧",
    "#动漫人生哲学",
    "#动画剧场",
    "#二次元生活",
    "#充满正能量的动画" ,
    "#dou上热门",
    "#我要上热门",
    "#一起上热门",
    "#这动画太火了",
    "#8090后经典回忆",
    "#童年回忆",
    "#怀旧动画片",
    "#80后动漫记忆",
    "#90后经典回忆",
    "#怀旧经典",
    "#经典动画歌曲",
    "#动画片中的感动",
    "#陪伴成长的动画",
    "#老少皆宜的动漫",
    "#黄金年代动画",
    "#家喻户晓的动画片",
    "#曾经的追逐",
    "#动画中的简单快乐",
    "#时代的印记"
]

def auto_release_kuaishou(video_path,title,user_data="User_Data"):


    # 创建 ChromeOptions，并指定 chrome.exe 的路径
    # 获取当前工作目录
    base_dir = os.getcwd()

    # 指定一个新的用户数据目录
    new_user_data_directory = os.path.join(base_dir, user_data)
    if not os.path.exists(new_user_data_directory):
        os.makedirs(new_user_data_directory)

    # 创建 ChromeOptions
    options = webdriver.ChromeOptions()
    options.add_argument(f"user-data-dir={new_user_data_directory}")  # 使用新的用户数据目录
    options.add_argument("profile-directory=Default")
    options.add_argument("--start-minimized")  # 启动时最小化窗口

    # 启动 Chrome
    driver = webdriver.Chrome(options=options)

    try:
        driver.get("https://cp.kuaishou.com/article/publish/video")
    except Exception as e:
        print(f"Failed to load page: {e}")


    time.sleep(10)

    print('开始上传视频.')
    # 视频上传
    file_input = WebDriverWait(driver, 1000).until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='file']")))

    file_input.send_keys(video_path)
    print('上传完成')

    time.sleep(3)
    try:
        # 等待第三个按钮出现  -- 第三个是合集
        button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable(
                (By.XPATH,
                 "(//div[contains(@class, 'ant-select ant-select-single ant-select-allow-clear ant-select-show-arrow')])[4]")
            )
        )

        print("找到按钮，准备点击。")

        # 点击按钮
        button.click()
        print("合集按钮已被点击。")

        time.sleep(1)
        # 等待并找到所有具有 ant-select-item-option 类的 div 元素
        items = WebDriverWait(driver, 10).until(
            EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ant-select-item-option"))
        )

        # 点击第二个元素（索引为 1）
        if len(items) > 1:  # 确保至少有两个元素
            items[2].click()
        else:
            print("没有找到第二个元素")
        print("已点击活跃选项。")
    except Exception as e:
        print(f"Error: {e}")

    # 随机选择一个标题
    random_title = random.choice(titles)
    print(random_title)
    # 填写描述
    title_input = WebDriverWait(driver, 150).until(
        EC.element_to_be_clickable((By.ID, "work-description-edit")))
    title_input.send_keys(f"{title} {random_title} ！")
    # 每次加三个标签
    title_input.send_keys(f"{random.choice(tags).replace('抖音','快手')} ")
    title_input.send_keys(f"{random.choice(tags).replace('抖音', '快手')} ")
    title_input.send_keys(f"{random.choice(tags).replace('抖音', '快手')} ")

    # 等待直到特定类名的元素出现-当有预览按钮时,说明上传成功
    preview_header = WebDriverWait(driver, 240).until(
        EC.presence_of_element_located((By.CLASS_NAME, "_preview-header_1ahzu_92"))
    )
    print("找到元素，继续执行下一步。")

    # 发布

    # 等待并找到具有特定类名并包含"发布"文本的 div 元素
    publish_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH,
                                    "//div[contains(@class, '_button_si04s_1') and contains(@class, '_button-primary_si04s_60')]//div[text()='发布']"))
    )

    # 点击该元素
    publish_button.click()

    print("已点击发布按钮。")

    # 等待 10 秒
    time.sleep(10)


    driver.quit()  # 确保在完成后关闭浏览器


def auto_release_douyin_tongman(video_path,title,user_date='User_Data'):

    # 创建 ChromeOptions，并指定 chrome.exe 的路径
    # 获取当前工作目录
    base_dir = os.getcwd()

    # 指定一个新的用户数据目录
    new_user_data_directory = os.path.join(base_dir, user_date)
    if not os.path.exists(new_user_data_directory):
        os.makedirs(new_user_data_directory)

    # 创建 ChromeOptions
    options = webdriver.ChromeOptions()
    options.add_argument(f"user-data-dir={new_user_data_directory}")  # 使用新的用户数据目录
    options.add_argument("profile-directory=Default")
    options.add_argument("--start-maximized")  # 最大化窗口

    # 启动 Chrome
    driver = webdriver.Chrome(options=options)

    '''
         作用：发布抖音视频
        '''

    # 进入创作者页面，并上传视频
    driver.get("https://creator.douyin.com/creator-micro/content/upload")
    time.sleep(10)
    # 视频上传
    file_input = WebDriverWait(driver, 1000).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='file']")))

    file_input.send_keys(video_path)
    print('上传完成')

    time.sleep(4)

    try:
        # 点击封面
        cover_button = WebDriverWait(driver, 600).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@class='cover-Jg3T4p']"))
        )
        cover_button.click()
        time.sleep(2)
        # 点击竖版按钮
        shuban_btn = WebDriverWait(driver, 600).until(
            EC.element_to_be_clickable(
                (By.XPATH, "//button[@class='semi-button semi-button-primary semi-button-light primary-RstHX_']"))
        )
        shuban_btn.click()
        # 点击完成按钮
        time.sleep(2)
        wancheng_btn = WebDriverWait(driver, 600).until(
            EC.element_to_be_clickable(
                (By.XPATH, "//button[@class='semi-button semi-button-primary semi-button-light primary-RstHX_']"))
        )
        wancheng_btn.click()

    except Exception as e:
        print(f"点击抖音封面Error: {e}")

    time.sleep(3)

    # 等待输入框加载并获取元素
    input_element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//input[@class='semi-input semi-input-default' and @type='text']"))
    )


    # 随机选择一个标题
    random_title = random.choice(titles)
    print(random_title)

    input_element.send_keys(f"{title} ")  # 替换为你要设置的文本
    input_element.send_keys(f'{random_title}')
    time.sleep(2)
    # 等待加载 input 元素  标题
    input_element2 = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.CLASS_NAME, 'editor-kit-container'))
    )
    time.sleep(2)
    # 随机选择一个标题
    random_desc = random.choice(descris)
    print(random_desc)


    # 设置文本
    input_element2.send_keys(f"{random_desc} ")  # 替换为你要设置的文本
    input_element2.send_keys(f"{random.choice(tags)} ")
    input_element2.send_keys(f"{random.choice(tags)} ")
    input_element2.send_keys(f"{random.choice(tags)} ")

    time.sleep(2)

    try:
        # 加入活动标识
        # 等待目标类似结构的 div 元素及其包含“动画”文本的下级 div 加载
        target_element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located(
                (
                    By.XPATH,
                    "//div[contains(@class, 'container-BPqaWp activity-right-N1pBMo')]//div[descendant::text()[contains(., '动画') or contains(., '动漫') or contains(., '卡通')]]"
                )
            )
        )

        # 点击该元素
        target_element.click()
    except Exception as e:
        print(f"未找到目标元素，错误信息：{e}")
    time.sleep(2)
    try:
        # 加入合集
        # 等待并点击第一个下拉框的 div semi-select select-collection-VQbX7A semi-select-single
        select_div = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable(
                (By.CLASS_NAME, "semi-select.select-collection-VQbX7A")
            )
        )
        select_div.click()  # 点击下拉选择框
        time.sleep(1)
        # 第二个合集,索引从1开始
        index = 3
        # 等待下拉选项出现，并找到第一个选项并点击
        first_option = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable(
                (By.XPATH, "(//div[contains(@class, 'semi-select-option collection-option')])["+str(index)+"]")
            )
        )

        first_option.click()
        print('成功点击合集')


    except Exception as e:
        print(f"未找到目标元素，错误信息：{e}")

    time.sleep(2)

    # 等待并检查是否存在包含"重新上传"文本的 div
    upload_div = WebDriverWait(driver, 180).until(
        EC.visibility_of_element_located(
            (By.XPATH, "//div[contains(text(), '重新上传')]")  # 使用 XPath 来查找包含文本的 div
        )
    )

    # 如果找到了 upload_div，则输出成功信息
    print("上传成功！可以点击发布按钮。")

    # 滚动到底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 等待滚动完成


    publish_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(
            (By.XPATH,
             "//button[contains(@class, 'primary-cECiOJ')]")
        )
    )



    # 点击发布按钮
    publish_button.click()

    print("已点击发布按钮。")

    # 等待 10 秒
    time.sleep(10)

    driver.quit()  # 确保在完成后关闭浏览器



#auto_release_kuaishou('J:\\202410视频剪辑\\猫和老鼠\\python\\38_20241223_095030_1.mp4','秃鹰耍猫')
#auto_release_douyin_qinggan('J:\\202410视频剪辑\\猫和老鼠\\python\\input.mp4','猫和老鼠。')
if __name__ == '__main__':
    watermarked_output_new,title_text=('J:\\202410视频剪辑\\猫和老鼠\\python\\input.mp4','秃鹰耍猫')
    #auto_release_kuaishou_tongman(watermarked_output_new,title_text)
    auto_release_douyin_tongman(watermarked_output_new,title_text)
    #auto_release_douyin_tongman(watermarked_output_new,title_text,user_date="User_Data_Qinggan")
    pass